/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package manager.auxiliares;

import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Timestamp;
import manager.principal.fonte.JanelaLogin;

/**
 *
 * @author diego1
 */
public class DateConverter {

    private static final int anoMesInstalação = 200905;
    private static String DatePattern = "^(?:(31)(\\D)(0?[13578]|1[02])\\2|(29|30)(\\D)(0?[13-9]|1[0-2])\\5|(0?[1-9]|1\\d|2[0-8])(\\D)(0?[1-9]|1[0-2])\\8)((?:1[6-9]|[2-9]\\d)?\\d{2})$|^(29)(\\D)(0?2)\\12((?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)$";

    public static String getDataPattern() {
        return DatePattern;
    }

//    public static LinkedList<String> getDiferencaMesAno(String mesAnoInicio, String mesAnoFim) {
//        LinkedList<String> mesAno = new LinkedList<String>();
//        while (Integer.parseInt(mesAnoInicio) <= Integer.parseInt(mesAnoFim)) {
//            mesAno.add(mesAnoInicio);
//            int mes = Integer.parseInt(mesAnoInicio.substring(4, 6));
//            mes++;
//            String mesAux = Integer.toString(mes);
//            if (mes < 10) {
//                mesAux = "0" + Integer.toString(mes);
//            }
//            int ano = Integer.parseInt(mesAnoInicio.substring(0, 4));
//            if (mes > 12) {
//                ano++;
//                mesAux = "01";
//            }
//            String anoAux = Integer.toString(ano);
//            mesAnoInicio = anoAux + mesAux;
//        }
//        return mesAno;
//    }
//
//    public static LinkedList<String> getUltimosAnoMes() {
//        LinkedList<String> listaAnoMes = new LinkedList<String>();
//        String data = "";
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT CURDATE();");
//            if (rs.first()) {
//                data = rs.getString(1).replace("-", "");
//            }
//            rs.close();
//            stm.close();
//        } catch (Exception e) {
//        }
//        listaAnoMes.add(data.substring(0, 6));
//        int anoMesAtual = Integer.parseInt(data.substring(0, 6));
//        int anoAtual = Integer.parseInt(getAnoAtual() + "00");
//        for (int i = 0; i < 11; i++) {
//            anoMesAtual = anoMesAtual - 1;
//            if ((anoMesAtual <= anoAtual) && (anoMesAtual > anoMesInstalação)) {
//                listaAnoMes.add(Integer.toString(anoAtual - 88));
//                anoMesAtual = anoAtual - 88;
//                anoAtual = anoAtual - 100;
//            } else if ((anoMesAtual > 200905)) {
//                listaAnoMes.add(Integer.toString(anoMesAtual));
//            }
//        }
//        return listaAnoMes;
//    }
//
//    /**
//     * Rertorna o ano e o mes atual no Formato AAAAMM
//     * @return
//     */
//    public static String getAnoMesAtual() {
//        String data = "";
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT CURDATE();");
//            if (rs.first()) {
//                data = rs.getString(1).replace("-", "");
//            }
//            rs.close();
//            stm.close();
//        } catch (Exception e) {
//        }
//        return data.substring(0, 6);
//    }
//
//    public static int getMesAtual() {
//        int mes = 0;
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT MONTH(CURDATE());");
//            if (rs.first()) {
//                mes = rs.getInt(1);
//            }
//            rs.close();
//            stm.close();
//        } catch (Exception e) {
//        }
//        return mes;
//    }
//
//    public static int getDiaAtual() {
//        int dia = 0;
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT DAY(CURDATE());");
//            if (rs.first()) {
//                dia = rs.getInt(1);
//            }
//            rs.close();
//            stm.close();
//        } catch (Exception e) {
//        }
//        return dia;
//    }
//
//    public static String getAnoAtual() {
//        String ano = "2008";
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT YEAR(CURDATE());");
//            if (rs.first()) {
//                ano = rs.getString(1);
//            }
//            rs.close();
//            stm.close();
//        } catch (Exception e) {
//        }
//        return ano;
//    }
//
//    /**
//     * Classe para consultar a data do presente momento que esta no servidor do banco de dados
//     * @return A data no formato AAAAMMDD
//     */
//    public static String getDataHojeFormatoBanco() {
//        String data = "";
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT CURDATE();");
//            if (rs.first()) {
//                data = rs.getString(1).replace("-", "");
//            }
//            rs.close();
//            stm.close();
//        } catch (Exception e) {
//        }
//        return data;
//    }
//
    /**
     * Classe para consultar a data do presente momento sendo esta vinda do
     * servidor do banco de dados
     *
     * @return A data no formato DD/MM/AAAA
     */
    public static String getCurrentDateInterface() {
        String date = "";
        try {
            Statement statement = JanelaLogin.getConnection().createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT CURDATE();");
            if (resultSet.first()) {
                String aux[] = resultSet.getString(1).split("-");
                date = aux[2] + "/" + aux[1] + "/" + aux[0];
            }
            resultSet.close();
            statement.close();
        } catch (Exception e) {
        }
        return date;
    }

    public static Timestamp getDataAtualBancoDados() {
        Timestamp date = new Timestamp(00 - 00 - 00);
        try {
            Statement statement = JanelaLogin.getConnection().createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT CURRENT_TIMESTAMP();");
            if (resultSet.first()) {
                date = resultSet.getTimestamp(1);
            }
            resultSet.close();
            statement.close();
        } catch (Exception e) {
        }
        return date;
    }
//
//    /**
//     * Converte a hora que esta no banco para um formato visual
//     * @param hora parametro inscrito no formato HHMMSS
//     * @return retorna a hora no formato HH:MM:SS
//     */
//    public static String formatarHoraBanco(String hora) {
//        if (hora.length() != 6) {
//            return "";
//        } else {
//            String h = hora.substring(0, 2);
//            String m = hora.substring(2, 4);
//            String s = hora.substring(4, 6);
//            return (h + ":" + m + ":" + s);
//        }
//    }
//
//    /**
//     * Função para ter acesso a hora atual do banco de dados
//     * @return retorna a hora atual no formato HHMMSS
//     */
//    public static String getHoraBanco() throws SQLException {
//        String horario = "";
//        Statement stm = JanelaLogin.con.createStatement();
//        ResultSet rs = stm.executeQuery("SELECT CURTIME();");
//        if (rs.first()) {
//            horario = rs.getString(1).replace(":", "");
//        }
//        rs.close();
//        stm.close();
//        return horario;
//
//    }
//
//    //Funcao para formatar a hora que vem do banco
//    public static String formatarBancoHora(String hora) {
//        if (hora.length() == 6) {
//            String result = hora.substring(0, 2) + ":" + hora.substring(2, 4) + ":" + hora.substring(4, 6);
//            return result;
//        } else {
//            return hora;
//        }
//    }
//
//    public static String formatarBancoAnoMes(String anoMes) {
//        String result = new String();
//        if (anoMes.length() < 6) {
//            result = "";
//        } else {
//            result = result.concat(anoMes.substring(4, 6) + "/" + anoMes.substring(0, 4));
//        }
//        return result;
//    }
//
//    public static String formatarDataBanco(String data) {
//        data = data.replaceAll(" ", "");
//        String[] partes = data.split("/");
//        String result = new String();
//        if (data.length() < 8) {
//            result = "";
//        } else {
//            result = result.concat(partes[2]);
//            result = result.concat(partes[1]);
//            result = result.concat(partes[0]);
//        }
//        return result;
//    }
//
//    /**
//     * Funçao para converter alguma data no formato a ser inserido no banco de dados
//     * @param data no formato DD/MM/AAAA
//     * @return data no formato AAAAMMDD
//     */
//    public static String formatarBancoData(String data) {
//        String result = new String();
//        if (data.length() < 8) {
//            result = "";
//        } else {
//            result = result.concat(data.substring(6, 8) + "/" + data.substring(4, 6) + "/" + data.substring(0, 4));
//        }
//        return result;
//    }
//
//    /**
//     * Seta os JComboBox com a data atual do banco de dados
//     * @param comboBoxDay JComboBox que exibe o dia
//     * @param comboBoxMonth JComboBox que exibe o mes
//     * @param comboBoxYear JComboBox que exibe o ano
//     */
//    public static void setComboBoxDate(JComboBox comboBoxDay, JComboBox comboBoxMonth, JComboBox comboBoxYear) {
//        setComboBoxDay(comboBoxDay);
//        setComboBoxMonth(comboBoxMonth);
//        setComboBoxYear(comboBoxYear);
//    }
//
//    /**
//     * Função para setar o JComboBox com o dia atual do banco de dados
//     * @param comboBoxDay JComboBox que exibe o dia atual
//     */
//    public static void setComboBoxDay(JComboBox comboBoxDay) {
//        int dia = 0;
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT DAY(CURDATE());");
//            if (rs.first()) {
//                dia = rs.getInt(1);
//            }
//            rs.close();
//            stm.close();
//        } catch (Exception e) {
//        }
//        if (dia > 0) {
//            dia--;
//        }
//        comboBoxDay.setSelectedIndex(dia);
//    }
////Funcao para setar o comboBox ano com o ano atual
//
//    public static void setComboBoxYear(JComboBox comboBoxYear) {
//        String ano = "2008";
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT YEAR(CURDATE());");
//            if (rs.first()) {
//                ano = rs.getString(1);
//            }
//            rs.close();
//            stm.close();
//        } catch (Exception e) {
//        }
//        for (int i = 0; i < comboBoxYear.getItemCount(); i++) {
//            if (ano.equals(comboBoxYear.getItemAt(i))) {
//                comboBoxYear.setSelectedIndex(i);
//                i = comboBoxYear.getItemCount();
//            }
//        }
//    }
//    //Funcao para setar o comboBox mes com o mes atual
//
//    public static void setComboBoxMonth(JComboBox comboBoxMonth) {
//        int mes = 0;
//        try {
//            Statement stm = JanelaLogin.con.createStatement();
//            ResultSet rs = stm.executeQuery("SELECT MONTH(CURDATE());");
//            if (rs.first()) {
//                mes = rs.getInt(1);
//            }
//            rs.close();
//            stm.close();
//            if (mes > 0) {
//                mes--;
//            }
//        } catch (Exception e) {
//        }
//        comboBoxMonth.setSelectedIndex(mes);
//    }
//
//    public static int dataToInt(String data) {
//        String inteiro = formatarDataBanco(data);
//
//        try {
//            int valor = Integer.parseInt(inteiro);
//            return valor;
//        } catch (Exception e) {
//            return 0;
//        }
//    }
//
//    public static boolean prazoEsgotado(String dataVencimento, int dias) {
//        GregorianCalendar d1 = new GregorianCalendar();
//        d1.set(GregorianCalendar.DATE, getDiaAtual());
//        d1.set(GregorianCalendar.MONTH, getMesAtual());
//        d1.set(GregorianCalendar.YEAR, Integer.parseInt(getAnoAtual()));
//        int dia = d1.get(GregorianCalendar.DATE);
//        int mes = d1.get(GregorianCalendar.MONTH);
//        int ano = d1.get(GregorianCalendar.YEAR);
//        String diaDiferente = Integer.toString(dia);
//        if (dia < 10) {
//            diaDiferente = "0" + Integer.toString(dia);
//        }
//        String mesDiferente = Integer.toString(mes);
//        if (mes < 10) {
//            mesDiferente = "0" + Integer.toString(mes);
//        }
//        String anoDiferente = Integer.toString(ano);
//        if (diferencaEmDias(anoDiferente + mesDiferente + diaDiferente, dataVencimento) <= dias) {
//            return true;
//        } else {
//            return false;
//        }
//    }
//
//    public static int diferencaEmDias(String c1, String c2) {
//        int ano1 = Integer.parseInt(c1.substring(0, 4));
//        int ano2 = Integer.parseInt(c2.substring(0, 4));
//        int mes1 = Integer.parseInt(c1.substring(4, 6));
//        int mes2 = Integer.parseInt(c2.substring(4, 6));
//        int dia1 = Integer.parseInt(c1.substring(6, 8));
//        int dia2 = Integer.parseInt(c2.substring(6, 8));
//
//        //calculando a diferença de dias entre as datas:
//        GregorianCalendar d1 = new GregorianCalendar();
//        d1.set(GregorianCalendar.DATE, dia1);
//        d1.set(GregorianCalendar.MONTH, mes1);
//        d1.set(GregorianCalendar.YEAR, ano1);
//        d1.getTime();
//
//        GregorianCalendar d2 = new GregorianCalendar();
//        d2.set(GregorianCalendar.DATE, dia2);
//        d2.set(GregorianCalendar.MONTH, mes2);
//        d2.set(GregorianCalendar.YEAR, ano2);
//        d2.getTime();
//
//        long m1 = d1.getTimeInMillis();
//        long m2 = d2.getTimeInMillis();
//        int value = (int) ((m2 - m1) / (24 * 60 * 60 * 1000));
//        return value;
//    }
//
//    public static String diferencaEmHoras(String c1, String c2) {
//        int hora1 = Integer.parseInt(c1.substring(0, 2));
//        int hora2 = Integer.parseInt(c2.substring(0, 2));
//        int minuto1 = Integer.parseInt(c1.substring(2, 4));
//        int minuto2 = Integer.parseInt(c2.substring(2, 4));
//        int segundo1 = Integer.parseInt(c1.substring(4, 6));
//        int segundo2 = Integer.parseInt(c2.substring(4, 6));
//
//        //calculando a diferença de horas entre as datas:
//        GregorianCalendar d1 = new GregorianCalendar();
//        d1.set(GregorianCalendar.DATE, 0);
//        d1.set(GregorianCalendar.MONTH, 0);
//        d1.set(GregorianCalendar.YEAR, 0);
//        d1.set(GregorianCalendar.HOUR, hora1);
//        d1.set(GregorianCalendar.MINUTE, minuto1);
//        d1.set(GregorianCalendar.SECOND, segundo1);
//
//        GregorianCalendar d2 = new GregorianCalendar();
//        d2.set(GregorianCalendar.DATE, 0);
//        d2.set(GregorianCalendar.MONTH, 0);
//        d2.set(GregorianCalendar.YEAR, 0);
//        d2.set(GregorianCalendar.HOUR, hora2);
//        d2.set(GregorianCalendar.MINUTE, minuto2);
//        d2.set(GregorianCalendar.SECOND, segundo2);
//
//        GregorianCalendar d3 = new GregorianCalendar();
//        d3.set(GregorianCalendar.DATE, 0);
//        d3.set(GregorianCalendar.MONTH, 0);
//        d3.set(GregorianCalendar.YEAR, 0);
//        d3.set(GregorianCalendar.HOUR, 4);
//        d3.set(GregorianCalendar.MINUTE, 0);
//        d3.set(GregorianCalendar.SECOND, 0);
//
//        long m1 = d1.getTimeInMillis();
//        long m2 = d2.getTimeInMillis();
//        long dif = (m2 - m1);
//        long seg = (dif / (1000));
//        int hou = (int) (((seg / 60) / 60) % 60);
//        int difHoras = 4 - hou;
//        if (difHoras <= 0) {
//            return "Prazo Esgotado";
//        } else if (difHoras == 1) {
//            return "Menos de 1 Hora";
//        } else {
//            return difHoras + " Horas";
//        }
//    }
//
//    public static double diferencaEmDias(DateFormater dataInicial, DateFormater dataFinal) {
//        double result = 0;
//        long diferenca = dataFinal.getTime() - dataInicial.getTime();
//        double diferencaEmDias = (diferenca / 1000) / 60 / 60 / 24; //resultado é diferença entre as datas em dias
//        long horasRestantes = (diferenca / 1000) / 60 / 60 % 24; //calcula as horas restantes
//        result = diferencaEmDias + (horasRestantes / 24d); //transforma as horas restantes em fração de dias
//
//        return result;
//    }
//
//    public static double diferencaEmHoras(DateFormater dataInicial, DateFormater dataFinal) {
//        double result = 0;
//        long diferenca = dataFinal.getTime() - dataInicial.getTime();
//        long diferencaEmHoras = (diferenca / 1000) / 60 / 60;
//        long minutosRestantes = (diferenca / 1000) / 60 % 60;
//        double horasRestantes = minutosRestantes / 60d;
//        result = diferencaEmHoras + (horasRestantes);
//
//        return result;
//    }
//
//    public static double diferencaEmMinutos(DateFormater dataInicial, DateFormater dataFinal) {
//        double result = 0;
//        long diferenca = dataFinal.getTime() - dataInicial.getTime();
//        double diferencaEmMinutos = (diferenca / 1000) / 60; //resultado é diferença entre as datas em minutos
//        long segundosRestantes = (diferenca / 1000) % 60; //calcula os segundos restantes
//        result = diferencaEmMinutos + (segundosRestantes / 60d); //transforma os segundos restantes em minutos
//
//        return result;
//    }
//
//    public static DateFormater convertDataBanco(String dataStr) throws SQLException, ParseException {
//        // converter de java.util.Date para java.sql.Date
//        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
//        java.util.Date dataUtil = df.parse(dataStr);
//
//        return dataUtil;
//    }
//
//    public static String prazoAtendimento(String dataCadastro, String dataAtual, String horaCadastro, String horaAtual, int diasPrazo) {
//        //Data
//        int diaInicial = Integer.parseInt(dataCadastro.substring(6, 8));
//        int diaFinal = Integer.parseInt(dataAtual.substring(6, 8));
//        int mesInicial = Integer.parseInt(dataCadastro.substring(4, 6));
//        int mesFinal = Integer.parseInt(dataAtual.substring(4, 6));
//        int anoInicial = Integer.parseInt(dataCadastro.substring(0, 4));
//        int anoFinal = Integer.parseInt(dataAtual.substring(0, 4));
//        //Hora
//        int horaInicial = Integer.parseInt(horaCadastro.substring(0, 2));
//        int horaFinal = Integer.parseInt(horaAtual.substring(0, 2));
//        int minutoInicial = Integer.parseInt(horaCadastro.substring(2, 4));
//        int minutoFinal = Integer.parseInt(horaAtual.substring(2, 4));
//        int segundoInicial = Integer.parseInt(horaCadastro.substring(4, 6));
//        int segundoFinal = Integer.parseInt(horaAtual.substring(4, 6));
//        DateFormater dataInicial = new DateFormater();
//        DateFormater dataFinal = new DateFormater();
//
//        //Setar data
//        dataInicial.setDate(diaInicial);
//        dataInicial.setMonth(mesInicial);
//        dataInicial.setYear(anoInicial);
//        dataFinal.setDate(diaFinal);
//        dataFinal.setMonth(mesFinal);
//        dataFinal.setYear(anoFinal);
//        //Setar horas
//        dataInicial.setHours(horaInicial);
//        dataInicial.setMinutes(minutoInicial);
//        dataInicial.setSeconds(segundoInicial);
//        dataFinal.setHours(horaFinal);
//        dataFinal.setMinutes(minutoFinal);
//        dataFinal.setSeconds(segundoFinal);
//
//        double diferencaEmDias = diferencaEmDias(dataInicial, dataFinal);
//        double diferencaEmHoras = diferencaEmHoras(dataInicial, dataFinal);
//
//        if (diferencaEmDias < 0 || diferencaEmHoras < 0) {
//            return "Erro";
//        } else if (diasPrazo == 0) {
//            if (diferencaEmDias < 2) {
//                if (diferencaEmHoras < 4) {
//                    double diferencaEmMinutos = (diferencaEmMinutos(dataInicial, dataFinal)) % 60;
//                    if (diferencaEmHoras == 0) {
//                        diferencaEmHoras = 1;
//                    }
//                    int horas = (int) (4.0 - diferencaEmHoras);
//                    int min = 0;
//                    if (diferencaEmMinutos != 0) {
//                        min = (int) (60 - diferencaEmMinutos);
//                    } else {
//                        min = (int) (diferencaEmMinutos);
//                    }
//                    return Integer.toString(horas) + " Hora(s) " + Integer.toString(min) + " Minuto(s)";
//                } else {
//                    return "Prazo Esgotado";
//                }
//            } else {
//                return "Prazo Esgotado";
//            }
//        } else {
//            int diasRestantes = (int) (diasPrazo - diferencaEmDias);
//            if (diasRestantes >= 0) {
//                return Integer.toString(diasRestantes) + " Dia(s)";
//            } else {
//                return "Prazo Esgotado";
//            }
//        }
//    }
}
